home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / libxml2 / libxml / hash.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-04-25  |  6.4 KB  |  234 lines

  1. /*
  2.  * Summary: Chained hash tables
  3.  * Description: This module implements the hash table support used in 
  4.  *         various places in the library.
  5.  *
  6.  * Copy: See Copyright for the status of this software.
  7.  *
  8.  * Author: Bjorn Reese <bjorn.reese@systematic.dk>
  9.  */
  10.  
  11. #ifndef __XML_HASH_H__
  12. #define __XML_HASH_H__
  13.  
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17.  
  18. /*
  19.  * The hash table.
  20.  */
  21. typedef struct _xmlHashTable xmlHashTable;
  22. typedef xmlHashTable *xmlHashTablePtr;
  23.  
  24. #ifdef __cplusplus
  25. }
  26. #endif
  27.  
  28. #include <libxml/xmlversion.h>
  29. #include <libxml/parser.h>
  30. #include <libxml/dict.h>
  31.  
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35.  
  36. /*
  37.  * Recent version of gcc produce a warning when a function pointer is assigned
  38.  * to an object pointer, or vice versa.  The following macro is a dirty hack
  39.  * to allow suppression of the warning.  If your architecture has function
  40.  * pointers which are a different size than a void pointer, there may be some
  41.  * serious trouble within the library.
  42.  */
  43. /**
  44.  * XML_CAST_FPTR:
  45.  * @fptr:  pointer to a function
  46.  *
  47.  * Macro to do a casting from an object pointer to a
  48.  * function pointer without encountering a warning from
  49.  * gcc
  50.  *
  51.  * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr))
  52.  * This macro violated ISO C aliasing rules (gcc4 on s390 broke)
  53.  * so it is disabled now
  54.  */
  55.  
  56. #define XML_CAST_FPTR(fptr) fptr
  57.  
  58.  
  59. /*
  60.  * function types:
  61.  */
  62. /**
  63.  * xmlHashDeallocator:
  64.  * @payload:  the data in the hash
  65.  * @name:  the name associated
  66.  *
  67.  * Callback to free data from a hash.
  68.  */
  69. typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
  70. /**
  71.  * xmlHashCopier:
  72.  * @payload:  the data in the hash
  73.  * @name:  the name associated
  74.  *
  75.  * Callback to copy data from a hash.
  76.  *
  77.  * Returns a copy of the data or NULL in case of error.
  78.  */
  79. typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
  80. /**
  81.  * xmlHashScanner:
  82.  * @payload:  the data in the hash
  83.  * @data:  extra scannner data
  84.  * @name:  the name associated
  85.  *
  86.  * Callback when scanning data in a hash with the simple scanner.
  87.  */
  88. typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
  89. /**
  90.  * xmlHashScannerFull:
  91.  * @payload:  the data in the hash
  92.  * @data:  extra scannner data
  93.  * @name:  the name associated
  94.  * @name2:  the second name associated
  95.  * @name3:  the third name associated
  96.  *
  97.  * Callback when scanning data in a hash with the full scanner.
  98.  */
  99. typedef void (*xmlHashScannerFull)(void *payload, void *data,
  100.                    const xmlChar *name, const xmlChar *name2,
  101.                    const xmlChar *name3);
  102.  
  103. /*
  104.  * Constructor and destructor.
  105.  */
  106. XMLPUBFUN xmlHashTablePtr XMLCALL
  107.             xmlHashCreate    (int size);
  108. XMLPUBFUN xmlHashTablePtr XMLCALL
  109.             xmlHashCreateDict(int size,
  110.                      xmlDictPtr dict);
  111. XMLPUBFUN void XMLCALL            
  112.             xmlHashFree    (xmlHashTablePtr table,
  113.                      xmlHashDeallocator f);
  114.  
  115. /*
  116.  * Add a new entry to the hash table.
  117.  */
  118. XMLPUBFUN int XMLCALL            
  119.             xmlHashAddEntry    (xmlHashTablePtr table,
  120.                                  const xmlChar *name,
  121.                                  void *userdata);
  122. XMLPUBFUN int XMLCALL            
  123.             xmlHashUpdateEntry(xmlHashTablePtr table,
  124.                                  const xmlChar *name,
  125.                                  void *userdata,
  126.                      xmlHashDeallocator f);
  127. XMLPUBFUN int XMLCALL            
  128.             xmlHashAddEntry2(xmlHashTablePtr table,
  129.                                  const xmlChar *name,
  130.                                  const xmlChar *name2,
  131.                                  void *userdata);
  132. XMLPUBFUN int XMLCALL            
  133.             xmlHashUpdateEntry2(xmlHashTablePtr table,
  134.                                  const xmlChar *name,
  135.                                  const xmlChar *name2,
  136.                                  void *userdata,
  137.                      xmlHashDeallocator f);
  138. XMLPUBFUN int XMLCALL            
  139.             xmlHashAddEntry3(xmlHashTablePtr table,
  140.                                  const xmlChar *name,
  141.                                  const xmlChar *name2,
  142.                                  const xmlChar *name3,
  143.                                  void *userdata);
  144. XMLPUBFUN int XMLCALL            
  145.             xmlHashUpdateEntry3(xmlHashTablePtr table,
  146.                                  const xmlChar *name,
  147.                                  const xmlChar *name2,
  148.                                  const xmlChar *name3,
  149.                                  void *userdata,
  150.                      xmlHashDeallocator f);
  151.  
  152. /*
  153.  * Remove an entry from the hash table.
  154.  */
  155. XMLPUBFUN int XMLCALL     
  156.             xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
  157.                            xmlHashDeallocator f);
  158. XMLPUBFUN int XMLCALL     
  159.             xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
  160.                             const xmlChar *name2, xmlHashDeallocator f);
  161. XMLPUBFUN int  XMLCALL    
  162.             xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
  163.                             const xmlChar *name2, const xmlChar *name3,
  164.                             xmlHashDeallocator f);
  165.  
  166. /*
  167.  * Retrieve the userdata.
  168.  */
  169. XMLPUBFUN void * XMLCALL            
  170.             xmlHashLookup    (xmlHashTablePtr table,
  171.                      const xmlChar *name);
  172. XMLPUBFUN void * XMLCALL            
  173.             xmlHashLookup2    (xmlHashTablePtr table,
  174.                      const xmlChar *name,
  175.                      const xmlChar *name2);
  176. XMLPUBFUN void * XMLCALL            
  177.             xmlHashLookup3    (xmlHashTablePtr table,
  178.                      const xmlChar *name,
  179.                      const xmlChar *name2,
  180.                      const xmlChar *name3);
  181. XMLPUBFUN void * XMLCALL            
  182.             xmlHashQLookup    (xmlHashTablePtr table,
  183.                      const xmlChar *name,
  184.                      const xmlChar *prefix);
  185. XMLPUBFUN void * XMLCALL            
  186.             xmlHashQLookup2    (xmlHashTablePtr table,
  187.                      const xmlChar *name,
  188.                      const xmlChar *prefix,
  189.                      const xmlChar *name2,
  190.                      const xmlChar *prefix2);
  191. XMLPUBFUN void * XMLCALL            
  192.             xmlHashQLookup3    (xmlHashTablePtr table,
  193.                      const xmlChar *name,
  194.                      const xmlChar *prefix,
  195.                      const xmlChar *name2,
  196.                      const xmlChar *prefix2,
  197.                      const xmlChar *name3,
  198.                      const xmlChar *prefix3);
  199.  
  200. /*
  201.  * Helpers.
  202.  */
  203. XMLPUBFUN xmlHashTablePtr XMLCALL        
  204.             xmlHashCopy    (xmlHashTablePtr table,
  205.                      xmlHashCopier f);
  206. XMLPUBFUN int XMLCALL            
  207.             xmlHashSize    (xmlHashTablePtr table);
  208. XMLPUBFUN void XMLCALL            
  209.             xmlHashScan    (xmlHashTablePtr table,
  210.                      xmlHashScanner f,
  211.                      void *data);
  212. XMLPUBFUN void XMLCALL            
  213.             xmlHashScan3    (xmlHashTablePtr table,
  214.                      const xmlChar *name,
  215.                      const xmlChar *name2,
  216.                      const xmlChar *name3,
  217.                      xmlHashScanner f,
  218.                      void *data);
  219. XMLPUBFUN void XMLCALL            
  220.             xmlHashScanFull    (xmlHashTablePtr table,
  221.                      xmlHashScannerFull f,
  222.                      void *data);
  223. XMLPUBFUN void XMLCALL            
  224.             xmlHashScanFull3(xmlHashTablePtr table,
  225.                      const xmlChar *name,
  226.                      const xmlChar *name2,
  227.                      const xmlChar *name3,
  228.                      xmlHashScannerFull f,
  229.                      void *data);
  230. #ifdef __cplusplus
  231. }
  232. #endif
  233. #endif /* ! __XML_HASH_H__ */
  234.